<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    <title>07-js事件循环机制</title>
</head>

<body>
    <script>
        /*
            js事件循环机制：
                代码执行的时候是从上到下逐行执行，先执行同步任务，遇到异步任务，交给相应的管理模块
                    例如：遇到了定时器，会交给定时器管理模块，它会倒计时，时间到了，会将定时器事件回调交给相应的队列（宏任务）
                    例如：遇到了ajax，会交给Ajax管理模块，它会发送请求，请求回来了，会将请求成功的事件回调交给相应的队列（宏任务）
                    例如：遇到了DOM事件，会交给DOM管理模块，它会等用户触发事件，用户触发了事件，会将事件回调交给相应的队列（宏任务）
                代码执行会先执行同步任务，再执行异步任务
                异步任务分为：宏任务和微任务
                    宏任务：定时器、ajax、dom事件
                    微任务：Promise.then Promise.catch  mutationobserver
                异步任务执行的时候是先清空微任务队列，然后取出第一个宏任务去执行
                取出的第一个宏任务执行完，就要再看微任务队列里有没有对应的任务，有的话会先清空微任务队列，再取出下一个宏任务去执行
                以此类推
        */
        // setTimeout(() => {
        //     console.log(123)
        // }, 2000)
        // for (var i = 0; i < 1000000; i++) {
        //     for (var j = 0; j < 1000000; j++) { }
        // }

        setTimeout(() => {
            console.log(3)
        }, 3000)
        setTimeout(() => {
            console.log(2)
        }, 2000)
        setTimeout(() => {
            console.log(1)
        }, 1000)
    </script>
</body>

</html>